package com.jh.fcsm.service.sys;

import com.jh.fcsm.beans.sys.SysMenu;
import com.jh.fcsm.beans.sys.vo.RouterVo;
import com.jh.fcsm.beans.sys.vo.SysMenuVo;
import com.jh.fcsm.beans.sys.vo.TreeSelect;
import com.jh.fcsm.common.BaseService;

import java.util.List;

public interface MenuService extends BaseService<SysMenu> {

    List<SysMenu> selectList(SysMenu sysMenu);

    SysMenu selectById(Object id);

    List<SysMenu> selectListAll();

    void insertSelective(SysMenu entity);

    int updateById(SysMenuVo vo);

    int updateSelectiveById(SysMenu entity);

    List<SysMenu> getUserAuthorityMenuByUserId(String userId);

    List<SysMenu> getUserAuthorityMenuByRoleUserId(String roleCode);

    List<SysMenu> selectByExample(Object example);

    void addSysMenu(SysMenuVo vo);

    /**
     * 删除菜单
     *
     * @param id
     */
    void deleteMenuById(String id);

    /**
     * 角色id查询权限
     *
     * @param roleId
     * @return
     */
    List<SysMenu> findRoleId(String roleId);

    /**
     * 根据用户查询菜单列表不带分页
     *
     * @param menu   查询条件
     * @param userId 用户ID
     * @return 结果
     */
    List<SysMenuVo> selectMenuList(SysMenuVo menu, String userId);

    /**
     * 菜单转树形
     *
     * @param menus
     * @return
     */
    List<TreeSelect> buildMenuTreeSelect(List<SysMenuVo> menus);

    /**
     * 构建前端路由所需要的菜单
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    List<RouterVo> buildMenus(List<SysMenuVo> menus);

    /**
     * 递归
     *
     * @param menus
     * @param p
     * @return
     */
    List<SysMenuVo> getChildPerms(List<SysMenuVo> menus, String p);

}
